package com.hjr.leetcode.question100;

/**
 * 10. 正则表达式匹配
 * 给你一个字符串 s 和一个字符规律 p，请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。
 *
 * '.' 匹配任意单个字符
 * '*' 匹配零个或多个前面的那一个元素
 * 所谓匹配，是要涵盖 整个 字符串 s 的，而不是部分字符串。
 */
public class q10 {

    public static void main(String[] args) {
        System.out.println(isMatch("aa", "a"));
        System.out.println(isMatch("aa", "a*"));
        System.out.println(isMatch("ab", ".*"));
        System.out.println(isMatch("aba", ".*a"));
    }

    //TODO 待完成
    public static boolean isMatch(String s, String p) {
        //1、特殊处理.*字符
        if (!p.contains(".") && !p.contains("*")){
            return s.equals(p);
        }
        //如果有.和*直接转为对应的字符
        int left = 0;
        int right = 0;
        while (left < s.length() && right < p.length()){
            if (p.charAt(right) == '.' || p.charAt(right) == '*'){
                if (p.charAt(right) == '.'){
                    left++;
                    right++;
                }else if (p.charAt(right) == '*' && right + 1 == p.length()){
                    break;
                }else if (p.charAt(right) == '*'){
                    String substring = p.substring(right + 1);
                    if (s.endsWith(substring)){
                        break;
                    }
                    return false;
                }
            }else {
                if (s.charAt(left) != p.charAt(right)) {
                    return false;
                }
                left++;
                right++;
            }
        }
        return true;
    }

}
